#include "tm1804.h"
#include "stm32f1xx_hal.h"







/********************??0???,???400ns,??1.25us************************/
//static void send_data_0()   
//{
//	 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
//	 __nop();__nop();__nop();
//	 __nop();__nop();__nop();

//	 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
//	 __nop();__nop();__nop();__nop();__nop();
//	 __nop();__nop();__nop();__nop();__nop();
//	 __nop();__nop();__nop();__nop();__nop();	
//	__nop();__nop();__nop();__nop();__nop();	
//}

#define send_data_0()  															\
	 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);					\
	 __nop();__nop();__nop();__nop();											\
	 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);					\
	 __nop();__nop();__nop();__nop();__nop();									\
	 __nop();__nop();__nop();__nop();__nop();									\
	 __nop();__nop();__nop();__nop();__nop();									\
	__nop();__nop();__nop();__nop();__nop();									\
	__nop();__nop();__nop();__nop();__nop();									\
//	__nop();__nop();__nop();__nop();__nop();									\
//	__nop();									

/*******************??1???,???800ns,??1.25us*************************/
//static void send_data_1()    
//{
//	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
//	 __nop();__nop();__nop();__nop();__nop();__nop(); 
//	 __nop();__nop();__nop();__nop();__nop();
//	 __nop();__nop();__nop();__nop();__nop();__nop(); 
//	 __nop();__nop();__nop();__nop();__nop();
//	__nop();__nop();__nop();__nop();
//	 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);  
//	__nop();__nop();__nop();__nop();__nop();__nop();  
//}

#define send_data_1()   													\
	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);          		\
	 __nop();__nop();__nop();__nop();__nop();__nop(); 						\
	 __nop();__nop();__nop();__nop();__nop();								\
	 __nop();__nop();__nop();__nop();__nop();__nop(); 						\
	 __nop();__nop();__nop();__nop();__nop();								\
	 __nop();__nop();__nop();										\
	 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); 			\
	__nop();__nop();__nop();__nop();__nop();						\


static void send_data(uint8_t DATA)		
{
	uint8_t dat = DATA;
	for(uint8_t i = 0; i<8; i++) {
		if(dat&0x80){
			send_data_1();
		}else{
			send_data_0();
		}
		dat <<= 1;
	}                         
}

//#define send_data(DATA)	                    \
//	for(uint8_t i = 0; i<8; i++) {\
//		if(DATA&0x80){\
//			send_data_1();\
//		}else{\
//			send_data_0();\
//		}\
//		DATA <<= 1;\
//	}


/******************************??1???*************************************/
void send_px(TMRGB RGB)
{	send_data(RGB.R);             //??R????
	send_data(RGB.G);             //??G????
	send_data(RGB.B);             //??B????
}

void LED_Display(const TMRGB RGB[4])
{
	__disable_irq(); 
	send_px(RGB[0]);
	send_px(RGB[1]);
	send_px(RGB[0]);
	send_px(RGB[1]);
	__enable_irq(); 
}

